package pe.edu.sistemas.postgrado.samupg.domain.model;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

@Entity
@Table(name = "correo", catalog = "bd_samupg")
public class Correo implements java.io.Serializable {

    private Integer correoId;
    private Usuario usuario;
    private String correoDireccion;
    private List<Comentario> comentarios = new ArrayList<Comentario>(0);

    public Correo() {
    }

    public Correo(Usuario usuario) {
        this.usuario = usuario;
    }

    public Correo(Usuario usuario, String correoDireccion, List<Comentario> comentarios) {
        this.usuario = usuario;
        this.correoDireccion = correoDireccion;
        this.comentarios = comentarios;
    }

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "correo_id", unique = true, nullable = false)
    public Integer getCorreoId() {
        return this.correoId;
    }

    public void setCorreoId(Integer correoId) {
        this.correoId = correoId;
    }

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "correo_usu_id", nullable = false)
    public Usuario getUsuario() {
        return this.usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    @Column(name = "correo_direccion", length = 50)
    public String getCorreoDireccion() {
        return this.correoDireccion;
    }

    public void setCorreoDireccion(String correoDireccion) {
        this.correoDireccion = correoDireccion;
    }

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "correo")
    @Fetch(value = FetchMode.SUBSELECT)
    public List<Comentario> getComentarios() {
        return this.comentarios;
    }

    public void setComentarios(List<Comentario> comentarios) {
        this.comentarios = comentarios;
    }
}
